Never
}
+impl fmt::Display for ColorConfig {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ match *self {
+ ColorConfig::Auto => "auto",
+ ColorConfig::Always => "always",
+ ColorConfig::Never => "never",
+ }.fmt(f)
+ }
+}
+
#[derive(Clone, Copy)]
pub struct ShellConfig {
pub color_config: ColorConfig,
pub fn get_verbose(&self) -> Verbosity {
self.verbosity
}
+
+ pub fn color_config(&self) -> ColorConfig {
+ assert!(self.out.config.color_config == self.err.config.color_config);
+ self.out.config.color_config
+ }
}
impl Shell {
use core::{Package, PackageId, PackageSet, Target, Resolve};
use core::{Profile, Profiles};
+use core::shell::ColorConfig;
use util::{self, CargoResult, human};
use util::{Config, internal, ChainError, profile, join_paths};
cmd.arg(&root_path(cx, unit));
+ let color_config = cx.config.shell().color_config();
+ if color_config != ColorConfig::Auto {
+ cmd.arg("--color").arg(&color_config.to_string());
+ }
+
cmd.arg("--crate-name").arg(&unit.target.crate_name());
for crate_type in crate_types.iter() {
execs().with_status(0)
.with_stderr_contains("[..] -C panic=abort [..]"));
}
+
+#[test]
+fn explicit_color_config_is_propagated_to_rustc() {
+ let mut p = project("foo");
+ p = p
+ .file("Cargo.toml", r#"
+ [package]
+
+ name = "test"
+ version = "0.0.0"
+ authors = []
+ "#)
+ .file("src/lib.rs", "");
+
+ assert_that(p.cargo_process("build").arg("-v").arg("--color").arg("always"),
+ execs().with_status(0).with_stderr_contains(
+ "[..]rustc src[..]lib.rs --color always[..]"));
+
+ assert_that(p.cargo_process("build").arg("-v").arg("--color").arg("never"),
+ execs().with_status(0).with_stderr("\
+[COMPILING] test v0.0.0 ([..])
+[RUNNING] `rustc src[..]lib.rs --color never --crate-name test --crate-type lib -g \
+ --out-dir [..]target[..]debug \
+ --emit=dep-info,link \
+ -L dependency=[..]target[..]debug \
+ -L dependency=[..]target[..]debug[..]deps`
+"));
+}